﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SCEM.DTO;
using System.Data.Objects;

namespace SCEM.DataLayer
{
    /// <summary>
    /// DAO do histórico do estoque
    /// </summary>
    public class HistoricoEstoqueDAO : EntityDAO<HistoricoEstoque>, IHistoricoEstoqueDAO
    {

        public HistoricoEstoqueDAO()
        {
            CanEntityBeDisabled = false;
            EntityEnabledProperty = "";
            OrderByProperty = "DataModificacao";
        }

        protected override IDTO<HistoricoEstoque> ConvertToDTO(HistoricoEstoque entity, ObjectContext context)
        {
            HistoricoEstoqueDTO dto = new HistoricoEstoqueDTO();
            dto.Id = entity.Id.ToString();
            dto.NomeResponsavel = entity.NomeResponsavel;
            dto.DataModificacao = entity.DataModificacao;
            dto.QuantidadeAlterada = entity.QuantidadeAlterada;

            //Produto
            dto.IdProduto = entity.Produto.Id.ToString();

            return dto;
        }

        public List<HistoricoEstoqueDTO> buscarHistoricoProdutos(string idProduto, DateTime dataInicio, DateTime dataFim)
        {

            Guid guidProduto;
            List<HistoricoEstoqueDTO> resultado = new List<HistoricoEstoqueDTO>();

            using (SCEMContainer context = new SCEMContainer())
            {

                if (idProduto == null)
                {
                    IQueryable<HistoricoEstoque> query = context.HistoricosEstoque.Where(h => h.DataModificacao >= dataInicio && h.DataModificacao <= dataFim);
                    List<HistoricoEstoque> listaHistoricoEstoque = query.ToList();

                    //convertendo para DTO
                    foreach (HistoricoEstoque historicoEstoque in listaHistoricoEstoque)
                    {
                        resultado.Add((HistoricoEstoqueDTO)ConvertToDTO(historicoEstoque, context));
                    }

                    return resultado;

                }
                else
                {
                    if (!Guid.TryParse(idProduto, out guidProduto))
                        return null; //erro

                    IQueryable<HistoricoEstoque> query = context.HistoricosEstoque.Where(h => h.Produto.Id == guidProduto && h.DataModificacao >= dataInicio && h.DataModificacao <= dataFim);
                    List<HistoricoEstoque> listaHistoricoEstoque = query.ToList();

                    //convertendo para DTO
                    foreach (HistoricoEstoque historicoEstoque in listaHistoricoEstoque)
                    {
                        resultado.Add((HistoricoEstoqueDTO)ConvertToDTO(historicoEstoque, context));
                    }

                    return resultado;
                }
            }

        }
    }

}
